//
//  main.m
//  C4_一维数组课后作业
//
//  Created by dllo on 15/10/9.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

//    // 2（＊）将第一题中的数组a反向输出。
//
//    int arr[10] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
//    for (int i = 9; i >= 0; i--) {
//        printf("a[%d] = %d ", i, a[i]);
//    }
    
    // 3. （＊）对第一题中的数组进行求和操作，打印计算结果。
//    int sum = 0;
//    for (int i = 0; i < 10; i++) {
//        sum += arr[i];
//    }
//    printf("sum = %d", sum);
    
//    // 4. （＊＊）计算第一题数组连减，打印计算结果。
//    int b[9] = {0};
//    for (int i = 0; i < 9; i++) {
//        b[i] = arr[i] - arr[i + 1];
//        printf("%d ", b[i]);
//    }
    
    // 5. （＊＊）随机产生20个10~50的正整数存放到数组中，并求数组中的多有元素最大值、最小值、平均值及各元素之和。
    
//    int arr[20] = {0};
//    int sum = 0;
//    for (int i = 0 ; i < 20; i++) {
//        arr[i] = arc4random()% ( 50 - 10 + 1) + 10;
//        printf("%d ", arr[i]);
//    }
//    printf("\n排序后:\n");
//    for (int i = 0; i < 20 - 1; i++) {
//        for (int j = 0; j < 20 - i - 1; j++) {
//            if (arr[j] > arr[j + 1]) {
//                int temp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 20; i++) {
//        sum += arr[i];
//        printf("%d ", arr[i]);
//    }
//    printf("最大值 = %d ", arr[19]);
//    printf("\n最小值 = %d", arr[0]);
//    printf("\n和 = %d", sum);
//    printf("\n平均值 = %d", sum / 20);
    
    // 6. 编写一个程序，输入两个包含5个元素的数组，先将两个数组升序排序，然后将这两个数组合并成一个升序数组。
    
//    int a[5] = {0};
//    int b[5] = {0};
//    int c[10] = {0};
//    printf("请输入a数组的5个元素\n");
//    for (int i = 0; i < 5; i++) {
//        scanf("%d", &a[i]);
//    }
//    printf("请输入b数组的5个元素\n");
//    for (int i = 0; i < 5; i++) {
//        scanf("%d", &b[i]);
//    }
//    printf("a排序后:\n");
//    for (int i = 0 ; i < 5 - 1; i++) {
//        for (int j = 0; j < 5 - i - 1; j++) {
//            if (a[j] > a[j + 1]) {
//                int temp = a[j];
//                a[j] = a[j + 1];
//                a[j + 1] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 5; i++) {
//        printf("%d ", a[i]);
//    }
//    printf("\nb排序后:\n");
//    for (int i = 0 ; i < 5 - 1; i++) {
//        for (int j = 0; j < 5 - i - 1; j++) {
//            if (b[j] > b[j + 1]) {
//                int temp = b[j];
//                b[j] = b[j + 1];
//                b[j + 1] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 5; i++) {
//        printf("%d ", b[i]);
//    }
//    printf("\nc数组:\n");
//    for (int i = 0; i < 10; i++) {
//        if (i < 5) {
//            c[i] = a[i];
//        } else {
//            c[i] = b[i - 5];
//        }
//    }
//    for (int i = 0; i < 10; i++) {
//        printf("%d ", c[i]);
//    }
//    printf("\nc排序后:\n");
//    for (int i = 0 ; i < 10 - 1; i++) {
//        for (int j = 0; j < 10 - i - 1; j++) {
//            if (c[j] > c[j + 1]) {
//                int temp = c[j];
//                c[j] = c[j + 1];
//                c[j + 1] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 10; i++) {
//        printf("%d ", c[i]);
//    }
    
    // 7. （＊＊＊）给定某年某月某日，输出其为这一年的第几天。
    
    // 判断闰年方法: (0 == a % 4 && 0 != a % 100) || 0 == a % 400
    
//    int date[3] = {0};
//    int jan = 31, mar = 31, may = 31, july = 31 ,aug = 31 ,oct = 31;
//    int apr = 30, jun = 30, sep = 30, nov = 30;
//    int feb = 0;
//    int sum = 0;
//    printf("请输入日期\n");
//    scanf("%d%d%d", &date[0], &date[1], &date[2]);
//    if ((0 == date[0] % 4 && 0 != date[0] % 100) || 0 == date[0] % 400) {
//        feb = 29;
//    } else {
//        feb = 28;
//    }
//    switch (date[1]) {
//        case 1:
//            sum += date[2];
//            break;
//        case 2:
//            sum += jan + date[2];
//            break;
//        case 3:
//            sum += jan + feb + date[2];
//            break;
//        case 4:
//            sum += jan + feb + mar + date[2];
//            break;
//        case 5:
//            sum += jan + feb + mar + apr + date[2];
//            break;
//        case 6:
//            sum += jan + feb + mar + apr +  may + date[2];
//            break;
//        case 7:
//            sum += jan + feb + mar + apr +  may +  jun + date[2];
//            break;
//        case 8:
//            sum += jan + feb + mar + apr +  may +  jun + july + date[2];
//            break;
//        case 9:
//            sum += jan + feb + mar + apr +  may +  jun + july + aug + date[2];
//            break;
//        case 10:
//            sum += jan + feb + mar + apr +  may +  jun + july + aug + sep + date[2];
//            break;
//        case 11:
//            sum += jan + feb + mar + apr +  may +  jun + july + aug + sep + oct + date[2];
//            break;
//        case 12:
//            sum += jan + feb + mar + apr +  may +  jun + july + aug + sep + oct + nov + date[2];
//            break;
//            
//        default:
//            break;
//    }
//    printf("这是%d年%d天", date[0], sum);
    
    // 8. （＊＊）编写整型值数组排序程序(冒泡排序--升序)
//    int a[] = {3, -9, 32, 77, 63, -24, 14, 0, 21, 45};
//    for (int i = 0; i < 10 - 1; i++) {
//        for (int j = 0; j < 10 - i - 1; j++) {
//            if (a[j] > a[j + 1]) {
//                int temp = a[j];
//                a[j] = a[j + 1];
//                a[j + 1] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 10; i++) {
//        printf("%d ", a[i]);
//    }
//    // 计算整型数组中共有多少个数
////    int count = sizeof(a)/sizeof(a[0]);
////    printf("\n%d", count);
    
    // 9、（＊＊＊）找出下列整型数组中最大和最小值及其所在位置i。
//    int a[] = {5,-9,32,77,64,-24,14,0,21,45};
//    int count = sizeof(a)/sizeof(a[0]);
//    for (int i = 0; i < count - 1; i++) {
//        for (int j = 0; j < count - i - 1 ; j++) {
//            if (a[j] > a[j + 1]) {
//                int temp = a[j];
//                a[j] = a[j + 1];
//                a[j + 1] = temp;
//            }
//        }
//    }
//    printf("最大值:%d\n", a[count - 1]);
//    printf("最小值:%d\n", a[0]);
////    int count1 =
//    printf("最大值位置:%d\n", sizeof(a[count - 1])/sizeof(a[0]));
    
    // 10、（＊）把str1, str2, str3合并到result数组中。
//    char result[50] = {0};
//    char str1[] = "Lanou ";
//    char str2[] = "23_class ";
//    char str3[] = " is niu best!";
////    结果：“Lanou 23_class is niu best!”
//    strcat(str2, str3);
//    strcat(str1, str2);
//    strcpy(result, str1);
//    printf("%s\n", result);
    
    // 11、（＊＊）找出下面程序的错误:
//    int main(int argc, char *argv[])
//    {
//        char string[11], str1[11];
//        int i;
//        for(i = 0; i < 10; i++)   // 定义字符串要多预留一个位置存\0
//        {
//            str1[i] = 'a';
//        }
//        printf("%s\n",str1);
//        strcpy(string, str1);
////    }
//        printf("%s",str1);

    // 12、（＊＊）下面这个程序执行后会有什么错误或者效果：
//    int main(int argc, char *argv[])
//    {
//        unsigned char str[10], i;      // unsigned : 无符号的char型
//        for(i = 0; i < 256; i++)    //越界
//            str[i] = i;
//    }
    
//    // 13、（＊＊＊）模拟n个人参加选举的过程，并输出选举结果：假设候选人有四人，分别用A、B、C、D表示，当选某候选人时，直接输入其编号(编号由计算机随机产生)，
//    若输入的不是A、B、C、D则视为无效票，选举结束后按得票数从高到低输出候选人编号和所得票数。
    
//        int n = 20;
//        int tickets[4] = {0};
//        char p[4] = {'A','B','C','D'};
//        for (int i = 0; i < n; i++) {
//            int number = arc4random()%5 + 65;
//            if (number != 69) {
//                tickets[number-65]++;
//            }
//        }
//        for (int i = 0; i < 4; i++) {
//            printf("%d ",tickets[i]);
//        }
//        printf("\n");
//        for (int i = 0; i < 4-1; i++) {
//            for (int j = 0; j < 4-1-i; j++) {
//                if (tickets[j] < tickets[j+1]) {
//                    int temp = tickets[j];
//                    tickets[j] = tickets[j+1];
//                    tickets[j+1] = temp;
//                    char temp2 = p[j];
//                    p[j] = p[j+1];
//                    p[j+1] = temp2;
//                }
//            }
//        }
//        for (int i = 0; i < 4; i++) {
//            printf("%c:%d ",p[i],tickets[i]);
//        }
    
    
    // 14、（＊＊＊＊）思考题：编程在一个已知的字符串中找最长单词，假定字符串中只含字母和空格，空格用来分隔不同单词。
//    比如："ni hao world”,最长单词是world。
    
    
//    char str[] = "ni hao world";
////    char a[20] = {0};
////    char b[20] = {0};
////    char c[20] = {0};
//    long len = strlen(str);
//    char a[10][10] = {0};
////    int count = 0;
////    printf("%ld\n", len);
//    for (int i = 0; i < len; i++) {
//        
//        while (' ' != str[i] && '\0' != str[i]) {
//            printf("%c", str[i]);
////                        count++;
////            if (0 == count) {
////                a[i] = str[i];
////            }
////            if (4 == count) {
////                b[i] = str[i];
////            }
////            if (8 == count) {
////                c[i] = str[i];
////            }
//            a[0][10] = str[i];
//            a[1][10] = str
//            i++;
//
//        }
//        printf("\n");
////        printf("%s\n", a);
////        printf("%s\n", b);
////        printf("%s\n", c);
//    }

    // 14、（＊＊＊＊）思考题：编程在一个已知的字符串中找最长单词，假定字符串中只含字母和空格，空格用来分隔不同单词。
    //    比如："ni hao world”,最长单词是world。
    char str[] = "ni hao world ia ii ooooo";
    int index = 0, max = 0, count = 0;
    long len = strlen(str);
    for (int i = 0; i < len; i++) {
        if (' ' != str[i] && '\0' != str[i]) {
            count++;
            if (max < count) {
                max = count;
                index = i + 1 - max;
            }
        }else
        {
            count = 0;
        }
    }
    printf("%d", max);
    printf("%d", index);
    for (int i = index; i < max + index; i++) {
        printf("%c",str[i]);
    }
    
    
    
    
    return 0;
}
